package com.core.ingenium.model;

import java.io.Serializable;

import java.math.BigDecimal;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;


@Entity
@NamedQueries( { @NamedQuery(name = "Pregunta.findAll", query = "select o from Pregunta o") })
@Table(name = "\"pregunta\"")
public class Pregunta extends PreguntaDato {
    @Column(name = "descripcion")
    private String descripcion;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private int id;
    @Column(name = "maxOpciones")
    private int maxOpciones;
    @Column(name = "pathImg")
    private String pathImg;
    @Column(name = "posicion")
    private int posicion;
    @Column(name = "valor")
    private BigDecimal valor;
    @OneToMany(mappedBy = "siguiente")
    private List<Pregunta> lstSiguientes;
    @OneToMany(mappedBy = "anterior")
    private List<Pregunta> lstAnteriores;
    @OneToMany(mappedBy = "pregunta")
    private List<Opcion> lstOpciones;

    @ManyToOne
        @JoinColumn(name = "opcionCorrecta")
        private Opcion opcionCorrecta;

        @ManyToOne
        @JoinColumn(name = "seccionEjemplo")
        private Seccion seccionEjemplo;

        @ManyToOne
        @JoinColumn(name = "seccionPregunta")
        private Seccion seccionPregunta;

        @OneToOne
        @JoinColumn(name = "anterior")
        private Pregunta anterior;

        @OneToOne
        @JoinColumn(name = "siguiente")
        private Pregunta siguiente;
    public Pregunta() {
    }

    public Pregunta(Pregunta anterior, String descripcion, int id, int maxOpciones, Opcion opcionCorrecta,
                    String pathImg, int posicion, Seccion seccionEjemplo, Seccion seccionPregunta, Pregunta siguiente,
                    BigDecimal valor) {
        this.anterior = anterior;
        this.descripcion = descripcion;
        this.id = id;
        this.maxOpciones = maxOpciones;
        this.opcionCorrecta = opcionCorrecta;
        this.pathImg = pathImg;
        this.posicion = posicion;
        this.seccionEjemplo = seccionEjemplo;
        this.seccionPregunta = seccionPregunta;
        this.siguiente = siguiente;
        this.valor = valor;
    }


    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getMaxOpciones() {
        return maxOpciones;
    }

    public void setMaxOpciones(int maxOpciones) {
        this.maxOpciones = maxOpciones;
    }


    public String getPathImg() {
        return pathImg;
    }

    public void setPathImg(String pathImg) {
        this.pathImg = pathImg;
    }

    public int getPosicion() {
        return posicion;
    }

    public void setPosicion(int posicion) {
        this.posicion = posicion;
    }


    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public void setSeccionEjemplo(Seccion seccionEjemplo) {
        this.seccionEjemplo = seccionEjemplo;
    }

    public void setSiguiente(Pregunta siguiente) {
        this.siguiente = siguiente;
    }

    public List<Pregunta> getLstSiguientes() {
        return lstSiguientes;
    }

    public void setLstSiguientes(List<Pregunta> lstSiguientes) {
        this.lstSiguientes = lstSiguientes;
    }

    public Pregunta addPregunta(Pregunta pregunta) {
        getLstSiguientes().add(pregunta);
        pregunta.setSiguiente(this);
        return pregunta;
    }

    public Pregunta removePregunta(Pregunta pregunta) {
        getLstSiguientes().remove(pregunta);
        pregunta.setSiguiente(null);
        return pregunta;
    }

    public void setSeccionPregunta(Seccion seccionPregunta) {
        this.seccionPregunta = seccionPregunta;
    }

    public void setAnterior(Pregunta anterior) {
        this.anterior = anterior;
    }

    public List<Pregunta> getLstAnteriores() {
        return lstAnteriores;
    }

    public void setLstAnteriores(List<Pregunta> lstAnteriores) {
        this.lstAnteriores = lstAnteriores;
    }

    public void setOpcionCorrecta(Opcion opcionCorrecta) {
        this.opcionCorrecta = opcionCorrecta;
    }

    public List<Opcion> getLstOpciones() {
        return lstOpciones;
    }

    public void setLstOpciones(List<Opcion> lstOpciones) {
        this.lstOpciones = lstOpciones;
    }

    public Opcion addOpcion(Opcion opcion) {
        getLstOpciones().add(opcion);
        opcion.setPregunta(this);
        return opcion;
    }

    public Opcion removeOpcion(Opcion opcion) {
        getLstOpciones().remove(opcion);
        opcion.setPregunta(null);
        return opcion;
    }

    public Opcion getOpcionCorrecta() {
        return opcionCorrecta;
    }

    public Seccion getSeccionEjemplo() {
        return seccionEjemplo;
    }

    public Seccion getSeccionPregunta() {
        return seccionPregunta;
    }

    public Pregunta getAnterior() {
        return anterior;
    }

    public Pregunta getSiguiente() {
        return siguiente;
    }
    //------------ESTA PARTE NO ES AUTOGENERADA POR JDEVELOPER.------------
        @Override
              public boolean isTieneImg() {
                  setTieneImg(false);
                  if (getPathImg() != null) {
                      if (!getPathImg().equals("")) {
                          setTieneImg(true);
                      }
                  }
                  return super.isTieneImg();
              }

              @Override
              public Opcion getOpcionSelected() {
                  for (Opcion o : getLstOpciones()) {
                      if (o.getEstaSeleccionada()) {
                          setOpcionSelected(o);
                          break;
                      }
                  }
                  return super.getOpcionSelected();
              }
}
